package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.RoomEntity;
import com.tfjybj.itoo.teach.model.RoomModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * RoomService接口
 * room表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface RoomService extends BaseServicePlus<RoomEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据房间代码模糊查询room
     *
     * @param code  房间代码
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的room
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<RoomEntity> queryByLikeCode(String code, Integer pageNo, Integer pageSize);
	//endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据建筑物ID查询所有可用的房间
     * @param  buildingId
     * @param  pageNo
     * @param  pageSize
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-16 19:34:10
     */
    PageInfo<RoomModel> queryRoomByBuildingId(String buildingId, Integer pageNo, Integer pageSize);

    /**
     * 根据最新十条房间信息
     * @return buildingModel
     * @author 段恩刚
     * @since 2.0.0 2018-11-18 19:34:10
     */
    List<RoomModel> queryNew10Rooms();

    /**
     * 根据Room名称Room类型模糊查询Room信息
     * @param roomName  房间名称
     * @param roomType  房间类型
     * @param pageNo   页码
     * @param pageSize 页数
     * @return roomModel
     * @author 段恩刚
     * @since 2.0.0 2018-11- 20 19:34:10
     */
    PageInfo<RoomModel> queryRoomsLikeNameOrType(String roomName, String roomType, Integer pageNo, Integer pageSize);

    /**
     * 根据roomName导出room信息
     * @param roomName roomName
     * @param response response
     * @return 是否导出成功
     * @author 段恩刚
     * @since 1.0.0 2018-11-24 20:15:55
     */
    boolean exportRoomInfos(String roomName, HttpServletResponse response);

    /**
     * 根据Room类型查询Room信息
     * @param roomType  房间类型
     * @return <roomModel>list</roomModel>
     * @author 段恩刚
     * @since 2.0.0 2018-11- 27 19:34:10
     */
    List<RoomModel> queryRoomsbyType(String roomType);

    /**
     * 根据RoomId集合查询Room信息
     * @param roomIds 房间类型
     * @return <roomModel>list</roomModel>
     * @author 段恩刚
     * @since 2.0.0 2018-11- 27 19:34:10
     */
    List<RoomModel> queryRoomsbyIds(List<String> roomIds);

    /**
     * 下载房间信息模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 段恩刚
     * @since 2.0.0 2018-11-15 08:53:53
     */
    boolean downLoadTemplate(HttpServletResponse response);

    /**
     * 批量导入
     *
     * @param multipartFile
     * @param request
     * @param response
     * @return
     * @author 段恩刚
     * @since 2.0.0 2018/11/27 14:33
     */
    ItooResult importTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 导出错误数据
     *
     * @param response 响应
     * @param errorListId 为成功导入的分组id
     * @return 课程信息model
     * @author 段恩刚
     * @since 2018年11月30日11:32:54
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);

    /**
     * 根据房间code和房间名称判断建筑是否已经存在
     * @param roomCode 房间code
     * @param roomName 房间名称
     * @return 建筑id
     * @author 段恩刚
     * @since 2.0.0 2018/11/27 19:19
     */
    String findIdIsExist(String roomName, String roomCode);

    /**
     * 根据房间名称模糊查询房间信息
     * @param roomName  建筑名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return roomModel
     * @author 段恩刚
     * @since 2018年12月15日19:44:31
     */
    PageInfo<RoomModel> queryRoomsByLikeName(String roomName, Integer pageNo, Integer pageSize);

    /**
     * 根据房间名称和建筑Id分页模糊查询房间信息
     * @param roomName  房间名称
     * @param buildingId
     * @param pageNo   页码
     * @param pageSize 页数
     * @return roomModel
     * @author 段恩刚
     * @since 2018年12月15日19:44:31
     */
    PageInfo<RoomModel> queryRoomsByLikeNameAndBuildingId(String roomName, String buildingId, Integer pageNo, Integer pageSize);

    /**
     * 根据建筑ID查询room信息
     *
     * @param buildingId 建筑ID
     * @return 根据建筑ID查询room信息
     * @author 杨江涛
     * @since 2.0.0 2018-11-23 08:35:56
     */
    List<RoomEntity> findByBuildingId(String buildingId);

    /**
     * 根据roomId查找Room表所有信息
     *
     * @param roomId 主键roomId
     * @return roomEntityList
     * @author 杨江涛
     * @since 2.0.0 2018-11-15 10:35:56
     */
    List<RoomEntity> findByRoomId(String roomId);

    /**
     * 根据校区代码查找Room表所有校区所有建筑的所有机房（返回list）
     *
     * @param schoolBranch 地理位置(010_西校区，011_东校区)
     * @return roomEntityList
     * @author 杨江涛
     * @since 2.0.0 2018-11-30 16:47:29
     */
    List<RoomEntity> findComputerRoom(Object schoolBranch);

    /**
     * 根据roomId查找Room表所有信息
     *
     * @param pageNo     页码
     * @param pageSize   每页条数
     * @param searchInfo 查询参数
     * @return roomEntityList
     * @author 杨江涛
     * @since 2.0.0 2018-12-6 19:17:44
     */
    PageInfo<RoomEntity> findRoom(String searchInfo, Integer pageNo, Integer pageSize);

    /**
     * 根据校区号和开考时间筛选教师
     *
     * @param schoolCode 校区号
     * @param startTime  配置考试开始时间
     * @return List<RoomEntity>
     * @author 马莹
     * @since 2018-12-7 20:53:31
     */
    List<RoomEntity> queryNoExamRoom(String schoolCode, String startTime);

    /**
     * 根据搜索框模糊查询考场
     *
     * @param fuzzyValue 搜索框参数
     * @param schoolKey  校区号
     * @param startTime  考试开始时间
     * @param endTime    考试结束时间
     * @return 筛选的结果集
     * @author yuyunxiu
     * @since 2018年12月12日
     */
    List<RoomModel> selNotExamRoom(String fuzzyValue, String schoolKey, String startTime, String endTime);

    /**
     * 根据东西校区以及考试开始时间加载考场
     *
     * @param schoolKey 校区key
     * @param startTime 考试开始时间
     * @param endTime   考试结束时间
     * @return 考场集合
     * @since 2019-3-24 17:33:12
     */
    List<RoomModel> selNotRoom(String schoolKey, String startTime, String endTime);
}
